tomcat9.0的filter拦截静态资源问题
更新日期:
引入
tomcat9.0中,servlet-api.jar中的Filter接口有三个方法:
init(): public default void init(FilterConfig filterConfig);
doFilter(): public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain);
destory(): public default void destroy();
init()和destory()有default修饰,也就是说,
可以不实现init()和destory()方法,实现该接口的类会继承这两个方法
无法解决的问题
????????????????????????????????????????
定义MyFilter实现Filter接口,重写doFilter()方法,拦截路径/*,这样会拦截所有的资源。
接着,对请求和响应进行设置编码格式,再放行
1 | @Override |
问题出现:
访问静态资源全部变成document类型
例如访问一个图片,该图片会以文档的形式被浏览器解析
问题定位:
设置响应编码格式的问题,具体原因
浏览器解析成text/html格式
response.setContentType(“text/html;charset=utf-8”);
解决:
解决1
tomcat7不会出现该问题
解决2:
对静态资源,非静态资源进行判断
如果是静态资源,不设置响应编码格式
默认会自动设置响应格式
例如:图片格式Content-Type:image/jpeg;charset=utf-8
如果是非静态资源,再设置响应编码格式